// v 1
var flag = true
var NfcAdapter;
var NdefRecord;
var NdefMessage;
var _getCardNo;
var text = '' 
export default {
    initNFC() {
        if (uni.getSystemInfoSync().platform == 'android') {
            listenNFCStatus()
        }
    },
    readNFC(callback) {
        if(flag){
			if (uni.getSystemInfoSync().platform == 'android') {
			    readData(callback);
			}
		}
    },
    closeNFC() {
        if (uni.getSystemInfoSync().platform == 'android') {
            closeReadAndWrite();
        }
    },
	writeNFC(text,callback){
		
		if(flag){
			if (uni.getSystemInfoSync().platform == 'android') {
			    writeData(text,callback)
			}
		}
	}
}
 
function listenNFCStatus() {
    try {
        var main = plus.android.runtimeMainActivity();
        var Intent = plus.android.importClass('android.content.Intent');
        var Activity = plus.android.importClass('android.app.Activity');
        var PendingIntent = plus.android.importClass('android.app.PendingIntent');
        var IntentFilter = plus.android.importClass('android.content.IntentFilter');
        NfcAdapter = plus.android.importClass('android.nfc.NfcAdapter');
        var nfcAdapter = NfcAdapter.getDefaultAdapter(main);
 
        if (nfcAdapter == null) {
            uni.showToast({
                title: '设备不支持NFC！',
                icon: 'none'
            })
			flag = false
            return;
        }
         
        if (!nfcAdapter.isEnabled()) {
            uni.showToast({
                title: '请在系统设置中先启用NFC功能！',
                icon: 'none'
            });
			flag = false
            return;
        }else{
			flag = true
		}
 
        var intent = new Intent(main, main.getClass());
        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        var pendingIntent = PendingIntent.getActivity(main, 0, intent, 0);
        var ndef = new IntentFilter("android.nfc.action.TECH_DISCOVERED");
        ndef.addDataType("*/*");
        var intentFiltersArray = [ndef];
        var techListsArray = [
            ["android.nfc.tech.IsoDep"],
            ["android.nfc.tech.NfcA"],
            ["android.nfc.tech.NfcB"],
            ["android.nfc.tech.NfcF"],
            ["android.nfc.tech.Nfcf"],
            ["android.nfc.tech.NfcV"],
            ["android.nfc.tech.NdefFormatable"],
            ["android.nfc.tech.MifareClassic"],
            ["android.nfc.tech.MifareUltralight"]
        ];
        plus.globalEvent.addEventListener("newintent",
            function() {
                setTimeout(handle_nfc_data1, 1000);
            }, false);
        plus.globalEvent.addEventListener("pause", function(e) {
            if (nfcAdapter) {
                nfcAdapter.disableForegroundDispatch(main);
            }
        }, false);
        plus.globalEvent.addEventListener("resume", function(e) {
            if (nfcAdapter) {
                //console.log('resume'); 
                nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
            }
        }, false);
        nfcAdapter.enableForegroundDispatch(main, pendingIntent, intentFiltersArray, techListsArray);
    } catch (e) {
        console.error(e);
    }
}
 
function handle_nfc_data1() {
    NdefRecord = plus.android.importClass("android.nfc.NdefRecord");
    NdefMessage = plus.android.importClass("android.nfc.NdefMessage");
    var main = plus.android.runtimeMainActivity();
    var intent = main.getIntent();
    //console.log("action type:" + intent.getAction()); 
    if ("android.nfc.action.TECH_DISCOVERED" == intent.getAction()) {
        if (readyWriteData) {
            __write(intent);
            readyWriteData = false;
        } else if (readyRead) {
            __read(intent);
            readyRead = false;
        }
    }
}
 
function showToast(msg) {
    plus.nativeUI.toast(msg);
}
 
function __write(intent) {
 try {
     waiting.setTitle('请勿移开标签\n正在写入...');
     // var text = document.getElementById('text').value;
     console.log("text=" + text);
     var textBytes = plus.android.invoke(text, "getBytes");
     var textRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
         plus.android.invoke("text/plain", "getBytes"), plus.android.invoke("", "getBytes"), textBytes);
     var message = new NdefMessage([textRecord]);
     var Ndef = plus.android.importClass('android.nfc.tech.Ndef');
     var NdefFormatable = plus.android.importClass('android.nfc.tech.NdefFormatable');
     var tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
     var ndef = Ndef.get(tag);
     if (ndef != null) {
         var size = message.toByteArray().length;
         console.log("size=" + size);
         ndef.connect();
         if (!ndef.isWritable()) {
             showToast("tag不允许写入");
             waiting.close();
			 if (typeof _getCardNo === 'function') {
			     _getCardNo(0);
			 }
             return;
         }
         if (ndef.getMaxSize() < size) {
             showToast("文件大小超出容量");
             waiting.close();
			 if (typeof _getCardNo === 'function') {
			     _getCardNo(0);
			 }
             return;
         }
 
         ndef.writeNdefMessage(message);
         waiting.close();
         showToast("写入数据成功.");
		 if (typeof _getCardNo === 'function') {
		     _getCardNo(1);
		 }
         return;
     } else {
         var format = NdefFormatable.get(tag);
         if (format != null) {
             try {
                 format.connect();
                 format.format(message);
                 showToast("格式化tag并且写入message");
                 waiting.close();
				 if (typeof _getCardNo === 'function') {
				     _getCardNo(1);
				 }
                 return;
             } catch (e) {
                 showToast("格式化tag失败.");
                 waiting.close();
				 if (typeof _getCardNo === 'function') {
				     _getCardNo(0);
				 }
                 return;
             }
         } else {
             showToast("Tag不支持NDEF");
             waiting.close();
			 if (typeof _getCardNo === 'function') {
			     _getCardNo(0);
			 }
             return;
         }
     }
 } catch (e) {
     console.log("error=" + e);
     waiting.close();
	 if (typeof _getCardNo === 'function') {
	     _getCardNo(0);
	 }
     alert('写入失败');
 }
 
}
 
function __read(intent) {
    try {
        var content = "";
        waiting.setTitle('请勿移开标签\n正在读取数据...');
        var tag = plus.android.importClass("android.nfc.Tag");
        tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        var bytesId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
		 let rawmsgs = intent.getParcelableArrayExtra("android.nfc.extra.NDEF_MESSAGES");
		let records = rawmsgs[0].getRecords();
		let result = records[0].getPayload();
		let data = plus.android.newObject("java.lang.String", result);
		 console.log('NFC 数据：', data);
        waiting.close();
        var tagid = bytesToHexString(tag.getId())
        if (typeof _getCardNo === 'function') {
            _getCardNo(data);
        }
    } catch (e) {
        uni.showToast({
            title: e,
            icon: 'none'
        });
    }
}
 
function bytesToHexString(inarray) {
    var i, j, x;
    var hex = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A",
        "B", "C", "D", "E", "F"
    ];
    var out = "";
    for (j = 0; j < inarray.length; ++j) {
        x = parseInt(inarray[j]) & 0xff;
        i = (x >> 4) & 0x0f;
        out += hex[i];
        i = x & 0x0f;
        out += hex[i];
    }
    return out;
}
 
function reverseTwo(str) {
 
    var str1 = "";
    for (var i = 1; i <= str.length; i++) {
        str1 += str[i - 1];
        if (i % 2 == 0) {
            if (i == str.length) {
                break;
            }
            str1 += ":";
        }
    }
    var str2 = "";
    for (var i = str1.split(":").length - 1; i >= 0; i--) {
        str2 += str1.split(":")[i];
    }
    return str2;
}
 
if (uni.getSystemInfoSync().platform == 'android') {
    //plus.globalEvent.addEventListener('plusready', listenNFCStatus, false);
}
 
var waiting;
var readyWriteData = false;
var readyRead = false;
 
function writeData(text1,getCardNo) {
	if(!text1){
		return
	}
	text = text1
	_getCardNo = getCardNo
	console.log("要写入的数据")
    readyWriteData = true;
    waiting = plus.nativeUI.showWaiting("请将NFC标签靠近！");
}
 
function readData(getCardNo) {
    readyRead = true;
    _getCardNo = getCardNo
    waiting = plus.nativeUI.showWaiting("请将NFC标签靠近！", {
        modal: false
    });
}
 
function closeReadAndWrite() {
    readyWriteData = false;
    readyRead = false;
 
    if (waiting) {
        waiting.close();
    }
}